package com.isd.global.web;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import com.isd.global.modelo.CorreoElectronico;
import com.isd.global.modelo.Parametro;
import com.isd.global.rn.ParametrosRN;
import com.isd.global.util.JsfUtil;
import com.isd.global.util.SenderEmail;
import com.isd.seguridad.web.UsuarioSessionBean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.mail.internet.InternetAddress;


/**
 *
 * @author ctrosch
 */
@ManagedBean(name="contactoBean")
@ViewScoped
public class ContactoBean implements Serializable {

    @EJB private ParametrosRN parametroRN;
    
    @EJB MailFactory mailFactoryBean;

    private String nombreContacto;
    private String emailContacto;
    private String asunto;
    private String telefono;
    private String mensaje;

    @ManagedProperty(value = "#{usuarioSessionBean}")
    private UsuarioSessionBean usuarioSession;

    /** Creates a new instance of ContactoMB */
    public ContactoBean() {

    }
    
    @PostConstruct
    private void init(){

        try {
            if (usuarioSession.isEstaRegistrado()) {

                nombreContacto = usuarioSession.getUsuario().getCliente().getNombre();
                emailContacto = usuarioSession.getUsuario().getCliente().getDireml();
                telefono = usuarioSession.getUsuario().getCliente().getTelefn();

            }
        } catch (Exception e) {
        }
    }

    public CorreoElectronico generarCorreoElectronicoCliente(){
        
        try {
            
            String destinatario = mailFactoryBean.validarDestinatario(emailContacto, true);
            
            if(destinatario.isEmpty()) {
                return null;
            }
            
            List<String> contenido = new ArrayList<String>();
            contenido.add("Estimado cliente");
            contenido.add("Su consulta ha sido enviada y en breve nos pondremos en contacto con usted para hacerle llegar nuestra respuesta");
            contenido.add("Su consulta:");
            contenido.add(mensaje);      

            String mensaje = mailFactoryBean.generarMensaje("Consulta web",contenido);

            return new CorreoElectronico("Consulta: "+asunto, destinatario, mensaje);

        } catch (Exception ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "generarCorreoElectronicoCliente", ex);
            return new CorreoElectronico("Error", "claudiotrosch@gmail.com", "Problemas para generar correo electrónico cliente");
        }

    }

    public CorreoElectronico generarCorreoElectronicoEmpresa() {
        
        try {
            Parametro p = null;
            p = parametroRN.getParametros();
            
            String asuntoAux = "Consulta web: " + asunto;
            String destinatario = mailFactoryBean.validarDestinatario(emailContacto, true);

            if(destinatario.isEmpty()) {
                return null;
            }
            
            List<String> contenido = new ArrayList<String>();
            
            contenido.add("Contacto: " + nombreContacto);
            contenido.add("Email: " + emailContacto);
            contenido.add("Telefono: " + telefono);
            contenido.add("Asunto: " + asunto);
            contenido.add("Consulta:\n");
            contenido.add(mensaje);      
            
            InternetAddress dirFrom = new InternetAddress(emailContacto, nombreContacto);
            
            return new CorreoElectronico(dirFrom,asuntoAux, p.getEmailRecepcionConsulta(), mailFactoryBean.generarMensaje("Consulta web",contenido));

            
        } catch (Exception ex) {

            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "generarCorreoElectronicoEmpresa", ex);            
            return new CorreoElectronico("Error", "claudiotrosch@gmail.com", "Problemas para generar correo consulta empresa");            
        }
        

    }

    public void enviarNotificaciones(){

        List<CorreoElectronico> correos = new ArrayList<CorreoElectronico>();

        correos.add(generarCorreoElectronicoEmpresa());
        correos.add(generarCorreoElectronicoCliente());        
        //Enviamos los correos con un nuevo hilo...
        SenderEmail se = new SenderEmail(mailFactoryBean, correos);
        se.start();
        reset();
        JsfUtil.addInfoMessage("Gracias por utilizar nuestra plataforma virtual, en breve nos pondremos en contacto con usted");
    }       
    
    
    public String verContacto(){

        return "../global/contacto.xhtml";
    }

    public void reset(){

        setAsunto(null);
        setEmailContacto(null);
        setTelefono(null);
        setMensaje(null);
        setNombreContacto(null);
    }

    public String getAsunto() {
        return asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public String getEmailContacto() {
        return emailContacto;
    }

    public void setEmailContacto(String emailContacto) {
        this.emailContacto = emailContacto;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    public String getNombreContacto() {
        return nombreContacto;
    }

    public void setNombreContacto(String nombreContacto) {
        this.nombreContacto = nombreContacto;
    }

    public UsuarioSessionBean getUsuarioSession() {
        return usuarioSession;
    }

    public void setUsuarioSession(UsuarioSessionBean usuarioSession) {
        this.usuarioSession = usuarioSession;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public ParametrosRN getParametroRN() {
        return parametroRN;
    }

    public void setParametroRN(ParametrosRN parametroRN) {
        this.parametroRN = parametroRN;
    }

}
